// 仓库
import { createStore } from 'redux';

const initState = {
  count: 1,
  list: [{
    name: '张三',
    age: 18,
    sex: '男'
  }, {
    name: '小丽',
    age: 18,
    sex: '女'
  }]
}

// 纯函数：只要传入参数相同，返回计算得到的下一个 state 就一定相同。没有特殊情况、没有副作用，没有 API 请求、没有变量修改，单纯执行计算。
// 1. 不可以修改参数
// 2. 不可以执行副作用  如：API 请求， 路由跳转， 定时器，dom操作等等
// 3. 调用非纯函数 如 Date.now() 或 Math.random()


const reduce = (state = initState, action) => {
  // 返回一个新数据代替旧数据， 
  // 不允许直接修改旧数据
  if (action.type === 'add') {
    return {
      ...state,
      count: state.count + action.payload
    }
  }

  if (action.type === 'addList') {
    const newList = [...state.list];
    newList.push(action.payload)
    
    return {
      ...state,
      list: newList
    }
  }


  return state
}

// 创建仓库
const store = createStore(reduce)

// 三大原则：
// 1. 单一数据源
// 2. State 是只读的
// 3. 使用纯函数来执行修改


export default store